Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(examples): add p/moul/collection #3321

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

feat(examples): add p/moul/collection #3321

wants to merge 3 commits into from

Conversation

moul
Copy link
Member

@moul moul commented Dec 10, 2024

Addresses #1467
Related with #3317

@moul moul self-assigned this Dec 10, 2024
@github-actions github-actions bot added the 🧾 package/realm Tag used for new Realms or Packages. label Dec 10, 2024
@moul moul changed the title dev/moul/avlindex feat(examples): add p/demo/avl/index Dec 10, 2024
@Gno2D2
Copy link
Collaborator

Gno2D2 commented Dec 10, 2024

🛠 PR Checks Summary

🔴 The pull request head branch must be up-to-date with its base (more info)

Manual Checks (for Reviewers):
  • SKIP: Do not block the CI for this PR
Read More

🤖 This bot helps streamline PR reviews by verifying automated checks and providing guidance for contributors and reviewers.

✅ Automated Checks (for Contributors):

🔴 The pull request head branch must be up-to-date with its base (more info)

☑️ Contributor Actions:
  1. Fix any issues flagged by automated checks.
  2. Follow the Contributor Checklist to ensure your PR is ready for review.
    • Add new tests, or document why they are unnecessary.
    • Provide clear examples/screenshots, if necessary.
    • Update documentation, if required.
    • Ensure no breaking changes, or include BREAKING CHANGE notes.
    • Link related issues/PRs, where applicable.
☑️ Reviewer Actions:
  1. Complete manual checks for the PR, including the guidelines and additional checks if applicable.
📚 Resources:
Debug
Automated Checks
The pull request head branch must be up-to-date with its base (more info)

If

🟢 Condition met
└── 🟢 On every pull request

Then

🔴 Requirement not satisfied
└── 🔴 Head branch (dev/moul/avlindex) is up to date with base (master): behind by 2 / ahead by 3

Manual Checks
**SKIP**: Do not block the CI for this PR

If

🟢 Condition met
└── 🟢 On every pull request

Can be checked by

  • Any user with comment edit permission

Copy link

codecov bot commented Dec 10, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

📢 Thoughts on this report? Let us know!

@moul moul force-pushed the dev/moul/avlindex branch from 1fb34a6 to 630e8f3 Compare December 10, 2024 19:11
@github-actions github-actions bot added 📦 🤖 gnovm Issues or PRs gnovm related 📦 ⛰️ gno.land Issues or PRs gno.land package related labels Dec 10, 2024
@moul moul force-pushed the dev/moul/avlindex branch from 630e8f3 to 887c1f0 Compare December 10, 2024 19:11
@moul moul changed the title feat(examples): add p/demo/avl/index feat(examples): add p/moul/collection Dec 10, 2024
Signed-off-by: moul <[email protected]>
@moul moul force-pushed the dev/moul/avlindex branch from fd8645c to 55ce510 Compare December 10, 2024 23:35
@moul moul marked this pull request as ready for review December 10, 2024 23:47
Copy link
Member

@notJoon notJoon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

left some some concerning points. other things are LGTM

Comment on lines +301 to +306
newKey, ok := safeGenerateKey(idx.fn, obj)
if !ok {
// Rollback: restore old object
c.indexes[IDIndex].tree.Set(idStr, oldObj)
return 0
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When rollback occurs due to safeGenerateKey call failures or UniqueIndex conflicts, only the _id index of oldObj is currently being restored.

I didn't found a mechanism to restore previously removed entries in other indices. This can lead to inconsistency between the _id index and other indices, may potentially compromising data integrity.

idx.tree.Remove(idStr)
continue
}
key := idx.fn(obj)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the Set function, when inserting data with the CaseInsensitiveIndex option enabled, keys are stored after being converted to lowercase.

if idx.options&CaseInsensitiveIndex != 0 {
	key = strings.ToLower(key)
}

However, it seems that the same processing is missing when removing these keys in the Delete or Update functions.

In this line, the code attempts to directly delete the key obtained from idx.fn(obj) without any coversion process. I think this can lead to a unexpected behaviour which delection or updates don't work properly because the key doesn't match the actual lowercase key stored in the index.

@Kouteki Kouteki added the in focus Core team is prioritizing this work label Dec 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
in focus Core team is prioritizing this work 📦 ⛰️ gno.land Issues or PRs gno.land package related 📦 🤖 gnovm Issues or PRs gnovm related 🧾 package/realm Tag used for new Realms or Packages.
Projects
Status: 📥 Inbox
Status: In Review
Development

Successfully merging this pull request may close these issues.

4 participants